#include "process.h"
#include <stdio.h>
#include <unistd.h> 
#include <stdlib.h>
#include <string.h>

#define NUM 101
#define STYLE '='
#define POINT '.'
#define SPACE ' '

const int pnum = 6;

// 版本2：真实的进度条，一个根据具体的情况，比如下载的量来动态刷新进度
/*void FlushProcess(double total, double current)
{

   // 1. 更新当前进度的百分比
   double rate = (current / total) * 100;
  // printf("test: %.1lf%%\r",rate);
  // fflush(stdout);
  
  // 2. 更新进度条主体
  char bar[NUM]; // 这里 1% 更新一个等号
  memset(bar, '\0', sizeof(bar));
  int i = 0;//定义放到了外面
  for(i = 0; i < (int)rate; i++)
  {
    bar[i] = STYLE;
  }
  
  // 3. 更新旋转光标或者其他风格
  static int num = 0;
  num++;
  num %= pnum;

  char points[pnum + 1];
  memset(points, '\0', sizeof(points));
  //直接用上面的i
  for(i = 0; i < pnum; i++)
  {
    if(i < num) points[i] = POINT;
    else  points[i] = SPACE;
  }

  
  // 4. test && printf
  printf("[%-100s][%.1lf%%]%s\r", bar, rate, points);
  fflush(stdout);
 // sleep(1);
}*/



// 版本1

void Process()
{
  const char *lable = "|/-\\";
  int len = strlen(lable);
  char bar[NUM];
  memset(bar, '\0', sizeof(bar));
  int cnt = 0;
  while(cnt <= 100)
  {
    printf("[%-100s][%d%%][%c]\r", bar, cnt, lable[cnt%len]);
    fflush(stdout);
    bar[cnt] = STYLE;
    // 1
    cnt++;
    if(cnt == NUM){
      bar[cnt - 1] = '\0';
      printf("[%-100s][%d%%][%c]\r", bar, cnt-1, lable[cnt%len]);
      break;
    }
    bar[cnt] = '>';
    usleep(100000);

    //2
   /* cnt++;
    usleep(100000);*/
  }
  printf("\r\n");
}
